#ifndef _SYS_ZIP_H_
#define _SYS_ZIP_H_

#include "FanObj.h"
#include "SysTypes.h"

#define ZIP_VTABLE(self)   ((ZipVTable*)((FanObj*)self)->vtable)


extern Type*    Zip_classType;
extern VTable*  Zip_classVTable;


/* [sys::Zip] Attributes */
struct Zip
{
  FanObj        super;
};


/* [sys::Zip] Virtual-table */
typedef struct ZipVTable
{
  FanObjVTable  super;
} ZipVTable;


/* [sys::Zip] Methods and fields */
Str*            Zip_toStr(Obj self);
Zip*            Zip_open(File* file);
Zip*            Zip_read(InStream* out);
Zip*            Zip_write(OutStream* out);
File*           Zip_file(Zip* self);
Map*            Zip_contents(Zip* self);
File*           Zip_readNext(Zip* self);
OutStream*      Zip_writeNext_1(Zip* self, Uri* path);
OutStream*      Zip_writeNext(Zip* self, Uri* path, DateTime* modifyTime);
Bool            Zip_finish(Zip* self);
Bool            Zip_close(Zip* self);


/* [sys::Zip] Type-system functions */
Type*           Zip_initType(void);
VTable*         Zip_initVTable(void);
void            Zip_initStatic(void);


#endif
